Test skipping based on module (esp. healpix) availability#944
Conversation
|
@davidhassell just a reminder as per our meeting today that it would be great to get this reviewed and merged when you have a change to look. Thanks. |
davidhassell
left a comment
There was a problem hiding this comment.
Hi Sadie,
I find that the setup variables are not available to the test methods ... is that what you get?
>>python test_HEALPix_utils.py
Run date: 2026-05-30 12:00:00.673592
Platform: Linux-6.8.0-124-generic-x86_64-with-glibc2.39
<snip>
test_HEALPix_pix2zuniq (__main__.DataTest.test_HEALPix_pix2zuniq)
Test _pix2zuniq ... ERROR
test_HEALPix_uniq2zuniq (__main__.DataTest.test_HEALPix_uniq2zuniq)
Test _uniq2zuniq ... ERROR
test_HEALPix_zuniq2pix (__main__.DataTest.test_HEALPix_zuniq2pix)
Test _zuniq2pix ... ERROR
test_HEALPix_zuniq2uniq (__main__.DataTest.test_HEALPix_zuniq2uniq)
Test _zuniq2uniq ... ERROR
======================================================================
ERROR: test_HEALPix_pix2zuniq (__main__.DataTest.test_HEALPix_pix2zuniq)
Test _pix2zuniq
----------------------------------------------------------------------
Traceback (most recent call last):
File "cf-python/cf/test/test_HEALPix_utils.py", line 84, in test_HEALPix_pix2zuniq
for r, i in zip(refinement_levels, nested_indices)
^^^^^^^^^^^^^^^^^
NameError: name 'refinement_levels' is not defined
======================================================================
ERROR: test_HEALPix_uniq2zuniq (__main__.DataTest.test_HEALPix_uniq2zuniq)
Test _uniq2zuniq
----------------------------------------------------------------------
Traceback (most recent call last):
File "cf-python/cf/test/test_HEALPix_utils.py", line 52, in test_HEALPix_uniq2zuniq
np.array_equal(_uniq2zuniq(nuniq_indices), zuniq_indices)
^^^^^^^^^^^^^
NameError: name 'nuniq_indices' is not defined
======================================================================
ERROR: test_HEALPix_zuniq2pix (__main__.DataTest.test_HEALPix_zuniq2pix)
Test _zuniq2pix
----------------------------------------------------------------------
Traceback (most recent call last):
File "cf-python/cf/test/test_HEALPix_utils.py", line 68, in test_HEALPix_zuniq2pix
order, i = _zuniq2pix(zuniq_indices, nest=True)
^^^^^^^^^^^^^
NameError: name 'zuniq_indices' is not defined
======================================================================
ERROR: test_HEALPix_zuniq2uniq (__main__.DataTest.test_HEALPix_zuniq2uniq)
Test _zuniq2uniq
----------------------------------------------------------------------
Traceback (most recent call last):
File "cf-python/cf/test/test_HEALPix_utils.py", line 60, in test_HEALPix_zuniq2uniq
np.array_equal(_zuniq2uniq(zuniq_indices), nuniq_indices)
^^^^^^^^^^^^^
NameError: name 'zuniq_indices' is not defined
----------------------------------------------------------------------
Ran 4 tests in 0.009s
FAILED (errors=4)
>>|
Good spot @davidhassell, thanks - I thought I'd sorted that in a clever way but forgot to check how it was handled when |
|
Hi Sadie - nearly there :) test_Field_regrid_2d_field (__main__.RegridTest.test_Field_regrid_2d_field)
2-d regridding with Field destination grid. ... ERROR
test_Field_regrid_chunks (__main__.RegridTest.test_Field_regrid_chunks)
Regridding of chunked axes ... ok
test_Field_regrid_weights_file (__main__.RegridTest.test_Field_regrid_weights_file)
Regridding creation/use of weights file ... ERROR
test_Field_regridc_1d_coordinates_z (__main__.RegridTest.test_Field_regridc_1d_coordinates_z)
1-d Z Cartesian regridding with coordinates destination grid. ... ERROR
test_Field_regridc_1d_field (__main__.RegridTest.test_Field_regridc_1d_field)
1-d Cartesian regridding with Field destination grid. ... ERROR
test_Field_regridc_2d_coords (__main__.RegridTest.test_Field_regridc_2d_coords)
2-d Cartesian regridding with coords destination grid. ... ERROR
test_Field_regridc_3d_field (__main__.RegridTest.test_Field_regridc_3d_field)
3-d Cartesian regridding with Field destination grid. ... ERROR
test_Field_regridc_domain (__main__.RegridTest.test_Field_regridc_domain)
Spherical regridding with Domain destination grid. ... ERROR
test_Field_regrids_bad_dst (__main__.RegridTest.test_Field_regrids_bad_dst)
Disallowed destination grid types raise an exception. ... ERROR
test_Field_regrids_coords (__main__.RegridTest.test_Field_regrids_coords)
Spherical regridding with coords destination grid. ... ERROR
test_Field_regrids_domain (__main__.RegridTest.test_Field_regrids_domain)
Spherical regridding with Domain destination grid. ... ERROR
test_Field_regrids_field_operator (__main__.RegridTest.test_Field_regrids_field_operator)
Spherical regridding with operator destination grid. ... ERROR
test_Field_regrids_non_coordinates (__main__.RegridTest.test_Field_regrids_non_coordinates)
Check setting of non-coordinate metadata. ... ERROR
test_return_esmpy_regrid_operator (__main__.RegridTest.test_return_esmpy_regrid_operator)
esmpy regrid operator returns esmpy.Regrid in regrids and regridc ... ERROR
======================================================================
ERROR: test_Field_regrid_2d_field (__main__.RegridTest.test_Field_regrid_2d_field)
2-d regridding with Field destination grid.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 166, in test_Field_regrid_2d_field
dst = self.dst.copy()
^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'dst'
======================================================================
ERROR: test_Field_regrid_weights_file (__main__.RegridTest.test_Field_regrid_weights_file)
Regridding creation/use of weights file
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 783, in test_Field_regrid_weights_file
dst = self.dst
^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'dst'
======================================================================
ERROR: test_Field_regridc_1d_coordinates_z (__main__.RegridTest.test_Field_regridc_1d_coordinates_z)
1-d Z Cartesian regridding with coordinates destination grid.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 755, in test_Field_regridc_1d_coordinates_z
src = cf.read(self.filename_xyz)[0]
^^^^^^^^^^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'filename_xyz'
======================================================================
ERROR: test_Field_regridc_1d_field (__main__.RegridTest.test_Field_regridc_1d_field)
1-d Cartesian regridding with Field destination grid.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 669, in test_Field_regridc_1d_field
dst = self.dst.copy()
^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'dst'
======================================================================
ERROR: test_Field_regridc_2d_coords (__main__.RegridTest.test_Field_regridc_2d_coords)
2-d Cartesian regridding with coords destination grid.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 386, in test_Field_regridc_2d_coords
dst = self.dst.copy()
^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'dst'
======================================================================
ERROR: test_Field_regridc_3d_field (__main__.RegridTest.test_Field_regridc_3d_field)
3-d Cartesian regridding with Field destination grid.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 565, in test_Field_regridc_3d_field
dst = self.dst.copy()
^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'dst'
======================================================================
ERROR: test_Field_regridc_domain (__main__.RegridTest.test_Field_regridc_domain)
Spherical regridding with Domain destination grid.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 452, in test_Field_regridc_domain
dst = self.dst
^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'dst'
======================================================================
ERROR: test_Field_regrids_bad_dst (__main__.RegridTest.test_Field_regrids_bad_dst)
Disallowed destination grid types raise an exception.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 417, in test_Field_regrids_bad_dst
self.src.regrids(999, method="conservative")
^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'src'
======================================================================
ERROR: test_Field_regrids_coords (__main__.RegridTest.test_Field_regrids_coords)
Spherical regridding with coords destination grid.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 317, in test_Field_regrids_coords
dst = self.dst.copy()
^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'dst'
======================================================================
ERROR: test_Field_regrids_domain (__main__.RegridTest.test_Field_regrids_domain)
Spherical regridding with Domain destination grid.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 429, in test_Field_regrids_domain
dst = self.dst
^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'dst'
======================================================================
ERROR: test_Field_regrids_field_operator (__main__.RegridTest.test_Field_regrids_field_operator)
Spherical regridding with operator destination grid.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 477, in test_Field_regrids_field_operator
dst = self.dst
^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'dst'
======================================================================
ERROR: test_Field_regrids_non_coordinates (__main__.RegridTest.test_Field_regrids_non_coordinates)
Check setting of non-coordinate metadata.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 515, in test_Field_regrids_non_coordinates
src = self.src
^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'src'
======================================================================
ERROR: test_return_esmpy_regrid_operator (__main__.RegridTest.test_return_esmpy_regrid_operator)
esmpy regrid operator returns esmpy.Regrid in regrids and regridc
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/david/cf-python/cf/test/test_regrid.py", line 818, in test_return_esmpy_regrid_operator
dst = self.dst
^^^^^^^^
AttributeError: 'RegridTest' object has no attribute 'dst'
----------------------------------------------------------------------
Ran 14 tests in 3.044s
FAILED (errors=13) |
|
Ah yes, sorry somehow my main environment on Python 3.14 which is meant to have everything optional in didn't have |
|
Thanks @davidhassell, should now (finally, sorry!) be good. |
davidhassell
left a comment
There was a problem hiding this comment.
Thanks - all tests pass for me :) Merge away ...
We have some test skipping for lack of required module availability, including cases where it is an 'optional' dependency not enforced by packaging requirements, but not comprehensive and not accounting for the new
healpixoptional dependency.In the background to the EXPECT GA I've went in and added all skips required, replacing those on individual methods with module-level skipping for relevant test modules (regrid-related tests which all need
esmpyincluding one case where there was a false positive i.e. test pass from lack of skip, and tests requiring an explicit or under-the-hood use ofhealpix).@davidhassell a sanity check would be useful but feel free to approve if you don't think a review is necessary given this PR is only trivial test infra changes.